package com.learn.a06_2_inventory.data

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import kotlinx.coroutines.flow.Flow

/**
 * Room 数据访问对象 (DAO)
 * 核心职责：定义对 [Item] 实体表的 CRUD 操作
 * 注解说明：
 * - @Dao 标识为 Room 的 DAO 接口
 * - SQL 语句直接操作数据库表 "items"
 */
@Dao
interface ItemDao {
    /**
     * 插入数据项（冲突时忽略）
     * @param item 要插入的实体对象
     * @see OnConflictStrategy.IGNORE 主键冲突时忽略插入
     */
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(item: Item)

    /**
     * 更新数据项
     * @param item 要更新的实体对象（根据主键匹配）
     */
    @Update
    suspend fun update(item: Item)

    /**
     * 删除数据项
     * @param item 要删除的实体对象（根据主键匹配）
     */
    @Delete
    suspend fun delete(item: Item)

    /**
     * 根据 ID 查询单个数据项
     * @param id 数据项主键
     * @return Flow 包装的查询结果（支持实时数据观察）
     */
    @Query("SELECT * from items WHERE id = :id")
    fun getItem(id: Int): Flow<Item>

    /**
     * 查询所有数据项（按名称升序排列）
     * @return Flow 包装的列表数据（支持实时数据观察）
     */
    @Query("SELECT * from items ORDER BY name ASC")
    fun getAllItems(): Flow<List<Item>>
}
